const Job = require('ee-core/jobs/baseJobClass');
const Loader = require('ee-core/loader');
const Log = require('ee-core/log');
const Ps = require('ee-core/ps');
const {childMessage} = require('ee-core/message');
const Hello = Loader.requireJobsModule('./example/hello');

/**
 * example - TimerJob
 * @class
 */
class TimerJob extends Job {

    constructor(params) {
        super();
        this.params = params;
    }

    /**
     * handle()方法是必要的，且会被自动调用
     */
    async handle() {
        Log.info("[child-process] TimerJob params: ", this.params);

        // 计时器任务

        let number = 0;
        let jobId = this.params.jobId;
        let eventName = 'job-timer-progress-' + jobId;
        let timer = setInterval(function () {
            Hello.welcome();

            childMessage.send(eventName, {jobId, number, end: false});
            number++;
        }, 1000);

        // 用 setTimeout 模拟任务运行时长
        setTimeout(() => {
            // 关闭定时器
            clearInterval(timer);

            // 任务结束，重置前端显示
            childMessage.send(eventName, {jobId, number: 0, pid: 0, end: true});

            // 如果是childJob任务，必须调用 Ps.exit() 方法，让进程退出，否则会常驻内存
            // 如果是childPoolJob任务，常驻内存，等待下一个业务
            if (Ps.isChildJob()) {
                Ps.exit();
            }
        }, 10 * 1000)
    }
}

TimerJob.toString = () => '[class TimerJob]';
module.exports = TimerJob;
